﻿Partial Public Class mitglied_suche
    Inherits System.Web.UI.Page
    Private _db As New hc_databaseDataContext

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            dropDownListenFüllen()
            l_AThanseaticconsultingDE.Text = "@hanseaticconsulting.de"
            'Wird diese Seite das erste Mal aufgerufen,
            'dann werden ALLE Mitglieder geladen.
            With gv_Mitgsuche
                .DataSource = (From it In _db.mitgliede_anwaerter _
                               Select it).ToList
                .DataBind()
            End With
        End If
    End Sub

    Private Sub dropDownListenFüllen()
        Dim ressorts As New HashSet(Of String)
        With ressorts
            .Add("")
            For Each mitglied In _db.mitgliede_anwaerter
                Dim r = mitglied.Ressort
                If (r IsNot Nothing) Then
                    .Add(r)
                End If
            Next
        End With
        ddl_Ressort.DataSource = ressorts
        ddl_Ressort.DataBind()
        Dim status As New HashSet(Of String)
        With status
            .Add("")
            For Each mitglied In _db.mitgliede_anwaerter
                Dim s = mitglied.Mitgliedsstatus
                If (s IsNot Nothing) Then
                    .Add(s)
                End If
            Next
        End With
        ddl_Status.DataSource = status
        ddl_Status.DataBind()
        Dim studiengänge As New HashSet(Of String)
        With studiengänge
            .Add("")
            For Each mitglied In _db.mitgliede_anwaerter
                Dim sg = mitglied.Studiengang
                If (sg IsNot Nothing) Then
                    .Add(sg)
                End If
            Next
        End With
        ddl_Studiengang.DataSource = studiengänge
        ddl_Studiengang.DataBind()
        Dim semester As New HashSet(Of String)
        With semester
            .Add("")
            For Each mitglied In _db.mitgliede_anwaerter
                Dim s = mitglied.Semester
                If (s IsNot Nothing) Then
                    .Add(s)
                End If
            Next
        End With
        ddl_Semester.DataSource = semester
        ddl_Semester.DataBind()
        Dim vertiefungen As New HashSet(Of String)
        With vertiefungen
            .Add("")
            For Each mitglied In _db.mitgliede_anwaerter
                Dim vt = mitglied.Vertiefung1
                If (vt IsNot Nothing) Then
                    .Add(vt)
                End If
                vt = mitglied.Vertiefung2
                If (vt IsNot Nothing) Then
                    .Add(vt)
                End If
                vt = mitglied.Vertiefung3
                If (vt IsNot Nothing) Then
                    .Add(vt)
                End If
                vt = mitglied.Vertiefung4
                If (vt IsNot Nothing) Then
                    .Add(vt)
                End If
            Next
        End With
        ddl_Vertiefung_1.DataSource = vertiefungen
        ddl_Vertiefung_1.DataBind()
        ddl_Vertiefung_2.DataSource = vertiefungen
        ddl_Vertiefung_2.DataBind()
        ddl_Vertiefung_3.DataSource = vertiefungen
        ddl_Vertiefung_3.DataBind()
        ddl_Vertiefung_4.DataSource = vertiefungen
        ddl_Vertiefung_4.DataBind()
        Dim ausbildungen As New HashSet(Of String)
        With ausbildungen
            .Add("")
            For Each mitglied In _db.mitgliede_anwaerter
                Dim a = mitglied.Ausbildung
                If (a IsNot Nothing) Then
                    .Add(a)
                End If
            Next
        End With
        ddl_Ausbildung.DataSource = ausbildungen
        ddl_Ausbildung.DataBind()
    End Sub

    Private Function stringSuchBedingung(ByVal dbString As String, ByVal suchString As String) As Boolean
        If suchString = "" Then
            Return True
        ElseIf IsNothing(dbString) Then
            Return False
        Else
            Return LCase$(dbString) Like "*" + LCase$(suchString) + "*"
        End If
    End Function

    Private Function checkSuchBedingung(ByVal ausgw As Boolean, ByVal dbBoolean As Boolean, ByVal suchBoolean As Boolean) As Boolean
        Return (Not ausgw) Or (dbBoolean = suchBoolean)
    End Function

    Protected Sub b_Suchen_Click(ByVal sender As Object, ByVal e As EventArgs) Handles b_Suchen.Click
        'Zuerst einmal holen wir uns ALLE Mitglieder des Vereins
        Dim alleMitglieder = (From it In _db.mitgliede_anwaerter _
                              Select it).ToList
        'Und dann wählen wir davon alle Mitglieder,
        'die unsere SUCHBEDINGUNGEN ERFÜLLEN.
        '(mit SQL-Befehl nicht so leicht lösbar)
        Dim suchMitglieder As New ArrayList
        For Each mitglied In alleMitglieder
            With mitglied
                Dim plz = False
                Dim dbPLZ = .Plz
                Dim suchPLZ = tb_PLZ.Text
                If Not IsNothing(dbPLZ) Then
                    plz = stringSuchBedingung(.Plz, tb_PLZ.Text)
                ElseIf suchPLZ = "" Then
                    plz = True
                End If
                Dim ersterHCAbend = False
                Dim dbErsterHCAbend = .ErsterHcAbend
                Dim suchErsterHCAbendNACH
                Try
                    suchErsterHCAbendNACH = CDate(tb_Erster_HC_Abend_nach.Text)
                Catch ex As Exception
                    suchErsterHCAbendNACH = Date.MinValue
                    tb_Erster_HC_Abend_nach.Text = ""
                End Try
                Dim suchErsterHCAbendVOR
                Try
                    suchErsterHCAbendVOR = CDate(tb_Erster_HC_Abend_vor.Text)
                Catch ex As Exception
                    suchErsterHCAbendVOR = Date.MaxValue
                    tb_Erster_HC_Abend_vor.Text = ""
                End Try
                If Not IsNothing(dbErsterHCAbend) Then
                    ersterHCAbend = (dbErsterHCAbend >= suchErsterHCAbendNACH) And (dbErsterHCAbend <= suchErsterHCAbendVOR)
                ElseIf (suchErsterHCAbendNACH = Date.MinValue) And (suchErsterHCAbendVOR = Date.MaxValue) Then
                    ersterHCAbend = True
                End If
                Dim apZielgespräch = False
                Dim dbAPZielgespräch = .ZielgespraechAP
                Dim suchAPZielgespräch = tb_AP_Zielgespräch.Text
                If Not IsNothing(dbAPZielgespräch) Then
                    apZielgespräch = stringSuchBedingung(.ZielgespraechAP, tb_AP_Zielgespräch.Text)
                ElseIf suchAPZielgespräch = "" Then
                    apZielgespräch = True
                End If
                Dim außenauftritt = False
                Dim ausgwAußenauftritt = cb_ob_Außenauftritt.Checked
                Dim dbAußenauftritt = .Aussenauftritt
                Dim suchAußenauftritt = cb_Außenauftritt.Checked
                If Not IsNothing(dbAußenauftritt) Then
                    außenauftritt = checkSuchBedingung(ausgwAußenauftritt, dbAußenauftritt, suchAußenauftritt)
                ElseIf Not ausgwAußenauftritt Then
                    außenauftritt = True
                End If
                Dim aktivPassiv = False
                Dim ausgwAktivPassiv = cb_ob_aktiv_passiv.Checked
                Dim dbAktivPassiv = .Aktiv_passiv
                Dim suchAktivPassiv = cb_aktiv_passiv.Checked
                If Not IsNothing(dbAktivPassiv) Then
                    aktivPassiv = checkSuchBedingung(ausgwAktivPassiv, dbAktivPassiv, suchAktivPassiv)
                ElseIf Not ausgwAktivPassiv Then
                    aktivPassiv = True
                End If
                Dim semester = False
                Dim dbSemester = .Semester
                Dim suchSemesterTB = tb_Semester.Text
                Dim suchSemesterDDL = ddl_Semester.SelectedValue
                If Not IsNothing(dbSemester) Then
                    semester = stringSuchBedingung(dbSemester, suchSemesterTB) And stringSuchBedingung(dbSemester, suchSemesterDDL)
                ElseIf (suchSemesterTB = "") And (suchSemesterDDL = "") Then
                    semester = True
                End If
                Dim mitgliedsaufnahmegespräch = False
                Dim dbMitgliedsaufnahmegespräch = .Mitgliedsausfnahmegespraech
                Dim suchMitgliedsaufnahmegespräch = tb_Mitgliedsaufnahmegespräch.Text
                If Not IsNothing(dbMitgliedsaufnahmegespräch) Then
                    mitgliedsaufnahmegespräch = stringSuchBedingung(.Mitgliedsausfnahmegespraech, tb_Mitgliedsaufnahmegespräch.Text)
                ElseIf suchMitgliedsaufnahmegespräch = "" Then
                    mitgliedsaufnahmegespräch = True
                End If
                Dim jpmZielgespräch = False
                Dim dbJPMZielgespräch = .ZielgespraechJPM
                Dim suchJPMZielgespräch = tb_JPM_Zielgespräch.Text
                If Not IsNothing(dbJPMZielgespräch) Then
                    jpmZielgespräch = stringSuchBedingung(.ZielgespraechJPM, tb_JPM_Zielgespräch.Text)
                ElseIf suchMitgliedsaufnahmegespräch = "" Then
                    jpmZielgespräch = True
                End If
                Dim pmAufnahmegespräch = False
                Dim dbPMAufnahmegespräch = .PmAufnahmeGespraech
                Dim suchPMAufnahmegespräch = tb_PM_Aufnahmegespräch.Text
                If Not IsNothing(dbPMAufnahmegespräch) Then
                    pmAufnahmegespräch = stringSuchBedingung(.PmAufnahmeGespraech, tb_PM_Aufnahmegespräch.Text)
                ElseIf suchMitgliedsaufnahmegespräch = "" Then
                    pmAufnahmegespräch = True
                End If
                If (stringSuchBedingung(.Vorname, tb_Vorname.Text) And _
                stringSuchBedingung(.Nachname, tb_Nachname.Text) And _
                stringSuchBedingung(.telefon, tb_Telefon.Text) And _
                stringSuchBedingung(.Skype, tb_Skype.Text) And _
                stringSuchBedingung(.Email_HC, tb_HC_Email.Text) And _
                stringSuchBedingung(.E_Mail_privat, tb_Email_privat.Text) And _
                stringSuchBedingung(.Strasse_hausnr, tb_Straße.Text) And _
                plz And _
                stringSuchBedingung(.Ort, tb_Ort.Text) And _
                ersterHCAbend And _
                apZielgespräch And _
                außenauftritt And _
                aktivPassiv And _
                (stringSuchBedingung(.Ressort, tb_Ressort.Text) And stringSuchBedingung(.Ressort, ddl_Ressort.SelectedValue)) And _
                (stringSuchBedingung(.Mitgliedsstatus, tb_Status.Text) And stringSuchBedingung(.Mitgliedsstatus, ddl_Status.SelectedValue)) And _
                (stringSuchBedingung(.Studiengang, tb_Studiengang.Text) And stringSuchBedingung(.Studiengang, ddl_Studiengang.SelectedValue)) And _
                semester And _
                ((stringSuchBedingung(.Vertiefung1, tb_Vertiefung_1.Text) And stringSuchBedingung(.Vertiefung1, ddl_Vertiefung_1.Text)) Or _
                (stringSuchBedingung(.Vertiefung2, tb_Vertiefung_1.Text) And stringSuchBedingung(.Vertiefung2, ddl_Vertiefung_1.Text)) Or _
                (stringSuchBedingung(.Vertiefung3, tb_Vertiefung_1.Text) And stringSuchBedingung(.Vertiefung3, ddl_Vertiefung_1.Text)) Or _
                (stringSuchBedingung(.Vertiefung4, tb_Vertiefung_1.Text) And stringSuchBedingung(.Vertiefung4, ddl_Vertiefung_1.Text))) And _
                ((stringSuchBedingung(.Vertiefung1, tb_Vertiefung_2.Text) And stringSuchBedingung(.Vertiefung1, ddl_Vertiefung_2.Text)) Or _
                (stringSuchBedingung(.Vertiefung2, tb_Vertiefung_2.Text) And stringSuchBedingung(.Vertiefung2, ddl_Vertiefung_2.Text)) Or _
                (stringSuchBedingung(.Vertiefung3, tb_Vertiefung_2.Text) And stringSuchBedingung(.Vertiefung3, ddl_Vertiefung_2.Text)) Or _
                (stringSuchBedingung(.Vertiefung4, tb_Vertiefung_2.Text) And stringSuchBedingung(.Vertiefung4, ddl_Vertiefung_2.Text))) And _
                ((stringSuchBedingung(.Vertiefung1, tb_Vertiefung_3.Text) And stringSuchBedingung(.Vertiefung1, ddl_Vertiefung_3.Text)) Or _
                (stringSuchBedingung(.Vertiefung2, tb_Vertiefung_3.Text) And stringSuchBedingung(.Vertiefung2, ddl_Vertiefung_3.Text)) Or _
                (stringSuchBedingung(.Vertiefung3, tb_Vertiefung_3.Text) And stringSuchBedingung(.Vertiefung3, ddl_Vertiefung_3.Text)) Or _
                (stringSuchBedingung(.Vertiefung4, tb_Vertiefung_3.Text) And stringSuchBedingung(.Vertiefung4, ddl_Vertiefung_3.Text))) And _
                ((stringSuchBedingung(.Vertiefung1, tb_Vertiefung_4.Text) And stringSuchBedingung(.Vertiefung1, ddl_Vertiefung_4.Text)) Or _
                (stringSuchBedingung(.Vertiefung2, tb_Vertiefung_4.Text) And stringSuchBedingung(.Vertiefung2, ddl_Vertiefung_4.Text)) Or _
                (stringSuchBedingung(.Vertiefung3, tb_Vertiefung_4.Text) And stringSuchBedingung(.Vertiefung3, ddl_Vertiefung_4.Text)) Or _
                (stringSuchBedingung(.Vertiefung4, tb_Vertiefung_4.Text) And stringSuchBedingung(.Vertiefung4, ddl_Vertiefung_4.Text))) And _
                (stringSuchBedingung(.Ausbildung, tb_Ausbildung.Text) And stringSuchBedingung(.Ausbildung, ddl_Ausbildung.SelectedValue)) And _
                mitgliedsaufnahmegespräch And _
                jpmZielgespräch And _
                pmAufnahmegespräch) Then
                    suchMitglieder.Add(mitglied)
                End If
            End With
        Next
        With gv_Mitgsuche
            .DataSource = suchMitglieder
            .DataBind()
        End With
    End Sub

    Protected Sub bla(ByVal sender As Object, ByVal e As EventArgs) Handles gv_Mitgsuche.SelectedIndexChanged
        Dim zellen = gv_Mitgsuche.SelectedRow.Cells
        Dim mitgliedsID As Int32 = (From it In _db.mitgliede_anwaerter _
                                    Where it.Nachname = HttpUtility.HtmlDecode(zellen(1).Text) And _
                                          it.Vorname = HttpUtility.HtmlDecode(zellen(2).Text) And _
                                          it.Email_HC = HttpUtility.HtmlDecode(zellen(4).Text) _
                                    Select it.ID).Single
        Session("MitgliedsID") = mitgliedsID
        Response.Redirect("mitglied_detail.aspx")
    End Sub
End Class